package com.hemerasolutions.v2trainer.service.interfaces;

import java.util.List;
import java.util.Map;

import com.hemerasolutions.v2trainer.model.exercise.Exercise;
import com.hemerasolutions.v2trainer.model.exerciseGroup.ExerciseGroup;
import com.hemerasolutions.v2trainer.model.exerciseGroup.VersionableExerciseGroup;
import com.hemerasolutions.v2trainer.model.library.Library;
import com.hemerasolutions.v2trainer.model.muscle.BodyRegion;
import com.hemerasolutions.v2trainer.model.training.TrainingType;
import com.hemerasolutions.v2trainer.service.ExceptionService;

public interface ExerciseGroupServiceInterface extends BaseServiceInterface {

	public abstract List<ExerciseGroup> filterExerciseGroups(
			Map<String, Object> fields, List<ExerciseGroup> exerciseGroups);

	public abstract List<VersionableExerciseGroup> findExerciseGroups(Map<String, Object> fields,
			List<Library> librarys);

	public abstract List<ExerciseGroup> searchExerciseGroups(Map<String, Object> fields);

	public abstract ExerciseGroup createExerciseGroup(ExerciseGroup exerciseGroup) throws ExceptionService;

	public abstract ExerciseGroup saveExerciseGroup(ExerciseGroup exerciseGroup) throws ExceptionService;

	public abstract void deleteExerciseGroup(ExerciseGroup exerciseGroup) throws ExceptionService;

	public abstract ExerciseGroup readExerciseGroup(ExerciseGroup exerciseGroup);

	public abstract List<TrainingType> listTrainingType();

	public abstract List<BodyRegion> listBodyRegion();

	public abstract List<Exercise> searchExercises(Map<String, Object> fields);

	public abstract List<VersionableExerciseGroup> searchVersionableExerciseGroups(
			Map<String, Object> fields);

	public abstract VersionableExerciseGroup saveVersionableExerciseGroup(
			VersionableExerciseGroup versionableExerciseGroup)
			throws ExceptionService;

	public abstract void deleteVersionableExerciseGroup(
			VersionableExerciseGroup versionableExerciseGroup)
			throws ExceptionService;

	public abstract VersionableExerciseGroup createVersionableExerciseGroup(
			VersionableExerciseGroup exerciseGroup) throws ExceptionService;


}
